const { DataTypes } = require('sequelize');
const { sequelize } = require('../config/database');

// 访客用户模型
const Visitor = sequelize.define('Visitor', {
    // UUID作为主键
    uuid: {
        type: DataTypes.UUID,
        primaryKey: true,
        allowNull: false,
        comment: '访客唯一标识符'
    },
    // Google OAuth相关字段
    googleId: {
        type: DataTypes.STRING,
        allowNull: true,
        unique: true,
        comment: 'Google账号ID'
    },
    email: {
        type: DataTypes.STRING,
        allowNull: true,
        comment: '用户邮箱'
    },
    displayName: {
        type: DataTypes.STRING,
        allowNull: true,
        comment: '用户显示名称'
    },
    avatar: {
        type: DataTypes.STRING,
        allowNull: true,
        comment: '用户头像URL'
    },
    // 最后登录时间
    last_login: {
        type: DataTypes.DATE,
        allowNull: true,
        comment: '最后一次登录时间'
    },
    // 注册时间（创建时间由 Sequelize 自动维护为 created_at）
    // 登录次数
    login_count: {
        type: DataTypes.INTEGER,
        allowNull: false,
        defaultValue: 1,
        comment: '累计登录次数'
    },
    // 访客状态: active, blocked 等
    status: {
        type: DataTypes.ENUM('active', 'blocked'),
        allowNull: false,
        defaultValue: 'active',
        comment: '访客状态'
    },
    last_chat_type: {
        type: DataTypes.STRING,
        allowNull: false,
        defaultValue: 'Girl',
        comment: '最后一次聊天类型'
    },
    password: {
        type: DataTypes.STRING,
        allowNull: true,
        comment: '用户密码（加密存储，可为空）'
    },
    reset_password_token: {
        type: DataTypes.STRING,
        allowNull: true,
        comment: '重置密码token'
    },
    reset_password_expires: {
        type: DataTypes.DATE,
        allowNull: true,
        comment: '重置密码token过期时间'
    },
    // 新增字段
    membership_expires_at: {
        type: DataTypes.DATE,
        allowNull: true,
        comment: '会员到期时间，null表示非会员'
    },
    tokens_balance: {
        type: DataTypes.DECIMAL(10, 3), // 修改为DECIMAL支持小数，总长度10位，小数3位
        allowNull: false,
        defaultValue: 0,
        comment: '当前代币余额（总计）'
    },
    // 代币来源分类余额（用于成本核算和对账）
    tokens_purchased: {
        type: DataTypes.DECIMAL(10, 3), // 修改为DECIMAL支持小数，总长度10位，小数3位
        allowNull: false,
        defaultValue: 0,
        comment: 'Stripe购买的代币余额'
    },
    tokens_promotional: {
        type: DataTypes.DECIMAL(10, 3), // 修改为DECIMAL支持小数，总长度10位，小数3位
        allowNull: false,
        defaultValue: 0,
        comment: '活动赠送的代币余额'
    },
    tokens_compensated: {
        type: DataTypes.DECIMAL(10, 3), // 修改为DECIMAL支持小数，总长度10位，小数3位
        allowNull: false,
        defaultValue: 0,
        comment: '补偿给用户的代币余额'
    },
    // 新增用户信息字段
    gender: {
        type: DataTypes.ENUM('male', 'female', 'other'),
        allowNull: true,
        defaultValue: null, // 明确设置默认值为null
        comment: '用户性别'
    },
    phone: {
        type: DataTypes.STRING,
        allowNull: true,
        comment: '用户电话号码'
    },
    membership_tier: {
        type: DataTypes.INTEGER,
        allowNull: true,
        defaultValue: null,
        comment: '会员等级：1=一级会员，2=二级会员，3=三级会员，null=普通用户'
    }
}, {
    tableName: 'visitors',
    comment: '访客用户表'
});

module.exports = Visitor; 